package com.fdb.efp.nls.service.util;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;

public class DataTradeUtil {
	/**
	 * 字典项转换，为授权表与核心通信转换
	 */
	public static String optTranse(String old){
		old=old.trim();
		Map<String,String> map = new HashMap<String,String>();
        
      //还款方式
        map.put("repaymentMode101", "B"); 	//只还利息
        map.put("repaymentMode102", "F"); 	//等额本息 
        map.put("repaymentMode201", "G"); 	//等额本金
        map.put("repaymentMode202", "N"); 	//协议还款
        map.put("repaymentMode203", "N"); 	//分期归还法 ->N:协议还款
        map.put("repaymentModenull","");	//数据问题
        
        //是否
        map.put("YN1", "1");	//是
        map.put("YN2", "2");	//否
        
        //扣款方式
        map.put("delayductType01", "2");	//有多少扣多少 ->有多少扣多少 
        map.put("delayductType02", "1");	//不足一期不扣 ->足额扣款
        map.put("delayductType03", "4");	//不自动扣款->不自动扣款还款
        map.put("delayductTypenull", "");	//数据问题
        
        //利率调整方式
        map.put("irAdjustMode1", "0");	//固定利率
        map.put("irAdjustMode2", "1");	//立即调整
        map.put("irAdjustMode3", "1");	//按月调整
        map.put("irAdjustMode4", "2");	//按季调整
        map.put("irAdjustMode5", "3");	//按年调整
        map.put("irAdjustMode6", "2");	//月初调整
        map.put("irAdjustMode7", "3");	//季初调整
        map.put("irAdjustMode8", "4");	//年初调整
        map.put("irAdjustModenull", "");//数据问题
        
        //保函种类
        map.put("guaranteeType1", "2");		//非融资类
        map.put("guaranteeType2", "1"); 	//融资类
        map.put("guaranteeTypenull", ""); 	//数据问题
        
        //贴现票据种类   产品
        map.put("billType1", "22040101"); 	//银票
        map.put("billType2", "22040102"); 	//商票
        map.put("billType3", "22040105"); 	//电子银票
        map.put("billType4", "22040106"); 	//电子商票
        
        //转贴现票据种类   产品
        map.put("zxbillType1", "22040103"); 	//银票
        map.put("zxbillType2", "22040104"); 	//商票
        map.put("zxbillType3", "22040107"); 	//电子银票
        map.put("zxbillType4", "22040108"); 	//电子商票
        //null转成""
        map.put("null", "") ;
        //担保方式
        map.put("AssureMeansMain00", "05");       //信用
        map.put("AssureMeansMain10", "01");       //抵押
        map.put("AssureMeansMain20", "02");       //质押
        map.put("AssureMeansMain30", "03");       //保证
        map.put("AssureMeansMainnull", "");//空
        map.put("AssureMeansMainNULL", "");//空
        map.put("AssureMeansMain", "");//空
        
        
        
      //利率类型
        map.put("interestRateType1", "A");        //A：固定利率、
        map.put("interestRateType2", "B");       //B：浮动利率、
        map.put("interestRateType", " ");       //B：浮动利率、
        //利率增量选项
        map.put("intRateIncOpt1", "1");        //1：按浮动值计算利息
        map.put("intRateIncOpt2", "2");        //2：按浮动比计算利息
        map.put("intRateIncOpt", "0");        //
        
        map.put("returnLoadCycle01", "1");//每月
        map.put("returnLoadCycle02", "12");//每年
        map.put("returnLoadCycle03", "14");//双周
        map.put("returnLoadCycle04", "15");//每半月
        map.put("returnLoadCycle05", "3");//每季度
        map.put("returnLoadCycle06", "6");//每半年
        map.put("returnLoadCycle07", "98");//到期时
        map.put("returnLoadCycle"," ");
        
      //结息周期
        map.put("interestAccMode01", "1");//每月
        map.put("interestAccMode02", "12");//每年
        map.put("interestAccMode03", "14");//双周
        map.put("interestAccMode04", "15");//每半月
        map.put("interestAccMode05", "3");//每季度
        map.put("interestAccMode06", "6");//每半年
        map.put("interestAccMode07", "98");//到期时
        map.put("interestAccMode"," ");//数据问题
        
        return (map.get(old)) != null?((String)(map.get(old))):old;
    }
	
	/**
	 * 根据贷款种类、期限转换核心利率编号
	 * 001  六个月以下                 
	 * 002  六个月到一年               
	 * 003  一年到三年                 
	 * 004  三年到五年                 
	 * 005  五年以上                   
	 * 011  个人住房贷款五年以下       
	 * 012  个人住房贷款五年以上       
	 * 021  个人住房公积金贷款五年以下 
	 * 022  个人住房公积金贷款五年以上
	 */
	public static String changeRateNo(String type, String term){
		String rateNo = "" ;
		if(type.equals("121201")){				//公积金贷款
			switch((Integer.parseInt(term)-1)/12){
			case 0:
			case 1:
			case 2:
			case 3:
			case 4:		rateNo = "021" ;
						break ;
			default:    rateNo = "022" ;
						break ;
			}
		}else if(type.startsWith("1203")){	//一般住房贷款
			switch((Integer.parseInt(term)-1)/12){
			case 0:
			case 1:
			case 2:
			case 3:
			case 4:		rateNo = "011" ;
						break ;
			default:    rateNo = "012" ;
						break ;
			}
		}else{							//普通贷款
			switch((Integer.parseInt(term)-1)/6){
				case 0:		rateNo = "001" ;
							break ;
				case 1:		rateNo = "002" ;
							break ;
				case 2:
				case 3:
				case 4:
				case 5:		rateNo = "003" ;
							break ;
				case 6:
				case 7:
				case 8:
				case 9:		rateNo = "004" ;
							break ;
				default:    rateNo = "005" ;
							break ;
			}
		}
		
		return rateNo ;
	}
	
	public static String checkNull(String value){
		if(value==null){
			return "" ;
		}
		
		return value ;
	}
	
	//日期转换yyyy-mm-dd转换成ddMMyyyy    substring(4, 8)
	public static String transDate(String date){
		String yyyy=date.substring(0, 4);
		String mm=date.substring(5,7);
		String dd=date.substring(8,10);
		return dd+mm+yyyy;
		
	}
		
	//日期转换yyyy-mm-dd转换成yyyyMMdd    
	public static String transDate2(String date){
		String yyyy=date.substring(0, 4);
		String mm=date.substring(5,7);
		String dd=date.substring(8,10);
		return yyyy+mm+dd;
		
	}
	
	//乘100
	public static String transPer(double value){
		DecimalFormat df = new DecimalFormat("0.000000000");
		return df.format(value*100);
	}
	
	/**
	 * 根据起始日、到期日，计算期限类型
	 * @param startDate, dueDate
	 * @param 0-短期，1-中期，2-长期
	 * @throws EMPException 
	 * @throws Exception
	 */
	public static String calTermType(String startDate, String endDate){
		String[] start = startDate.split("-") ;
		String[] end = endDate.split("-") ;
		int term = 0 ;
		
		term = ((Integer.parseInt(end[0])-Integer.parseInt(start[0]))*12 
					+ (Integer.parseInt(end[1])-Integer.parseInt(start[1])) 
					+ (Integer.parseInt(end[2])>Integer.parseInt(start[2])?1:0)) ;
		if(term/12==0)
		{
			return "0" ;
		}
		if(term/12==1)
		{
			if(term%12==0)
			{
				return "0" ;
			}else{
				return "1" ;
			}
		}
		if((term/12)>1&&(term/12)<5)
		{
			return "1" ;
		}	
		if((term/12)>=5){
			if((term/12)==5){
				if(term%12==0)
				{
					return "1" ;
				} else {
					return "2";
				}
			}
				return "2";
		}
		    return "2";
	}
}
